package com.example.sysa.Interceptors;

import com.example.sysa.utils.HttpUtils;
import com.example.sysa.utils.SSOClientUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 拦截器
 */
@Component
public class SsoClientInterceptor extends HandlerInterceptorAdapter {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //放行通过 true，拦截 false
        //1.判断是否存在会话(局部会话)
        HttpSession session = request.getSession();
        Boolean isLoign = (Boolean) session.getAttribute("isLogin");
        if (null != isLoign && isLoign) {
            return true;
        }

        //2.判断token   认证中心跳转过来，携带token，此处判断token是否正确
        String token = request.getParameter("token");//认证中心跳转过来传递的参数
        if (StringUtils.isNotEmpty(token)) {
            System.out.println("检测到token信息，需要拿到服务器去校验token" + token);
            //验证token是否正确，发送请求，携带token，如果返回true则表示token正确
            String param = "token=" + token;
            String url = SSOClientUtil.SERVER_URL_PREFIX + "/verify";
            String isVerify = HttpUtils.sendPost(url, param);
            if ("true".equals(isVerify)) {
                System.out.println("服务器端校验token信息通过");
                session.setAttribute("isLogin", true);  //创建用户登录标识，标识用户已登录
                return true;
            }

        }
        //没有登录信息，没有token的时候，跳转到登录的服务器验证用户信息是否存在
        //www.sso-server:9999/checkLogin?redirect=www.sys-a.com:10000/index
            SSOClientUtil.redirectToSSOURL(request, response);
        return false;
    }
}
